# -*- coding: utf-8 -*-
"""
Created on Fri Sep 24 09:13:50 2021

@author: Administrator
"""
from skimage import data
from matplotlib import pyplot as plt
import math
import numpy as np
import sys
#定义RGB图像转换为HSI图像的函数
def rgb2hsi(r,g,b):
    r=r/255
    g=g/255
    b=b/255
    num=0.5*((r-g)+(r-b))
    den=((r-g)*(r-g)+(r-b)*(g-b))**0.5
    if b<=g:
        if den==0:
            den=sys.float_info.min
            h=math.acos(num/den)
        elif b>g:
            if den==0:
                den=sys.float_info.min
                h=(2*math.pi)-math.acos(num/den)
                s=1-(3*min(r,g,b)/(r+b+g))
                i=(r+g+b)/3
                return int(h),int(s*100),int(i*255)
            image=data.imread('flower.jpg')
            hsi_image=np.zeros(image.shape,dtype='uint8')
            for ii in range(image.shape[0]):
                for jj in range(image.shape[1]):
                    r,g,b=image[ii,jj,:]
                    h,s,i=rgb2hsi(r,g,b)
                    hsi_image[ii,jj,:]=(h,s,i)
                    plt.figure()
                    #不显示坐标轴
                    plt.axis('off')
                    #显示RGB原图像
                    plt.imshow(image)
                    #R分量图像
                    plt.figure()
                    #不显示坐标轴
                    plt.axis('off')
                    #显示R分量图像
                    plt.imshow(image[:, :, 0], camp='gray')
                    #H分量图像
                    plt.figure()
                    #不显示坐标轴
                    plt.axis('off')
                    #显示H分量图像
                    plt.imshow(hsi_image[:, :, 0], camp='gray')
                    #S分量图像
                    plt.figure()
                    #不显示坐标轴
                    plt.axis('off')
                    #显示S分量图像
                    plt.imshow(hsi_image[:, :, 1], camp='gray')
                    #I分量图像
                    plt.figure()
                    #不显示坐标轴
                    plt.axis('off')
                    #显示I分量图像
                    plt.imshow(hsi_image[:, :, 2], camp='gray')

                    
                    
                
            
                
            
